NTSC progressive scanning mode and simpler sync methods are little
documented and this issue is addressed here. Producing video signals
going to lowest hardware level is fun and very satisfying. With the
number of very capable digital controllers available to hobbyists, it
has become possible to generate analog video signals entirely in
software. With the techniques and sync patterns presented here,
generating "software video" becomes a much easier task.
NTSC has been around for a very long time but there seems to be a lack
of clarity in many of the common techniques used by digital hardware in
generating the video signal. I have attempted to collect as much
information as possible about the techniques and cheats used by various
consoles and suggested in other papers. One Sync Signal that is the most
easiest to produce and has wide compatibility is presented and some of
the less mentioned nuances about sync signals and fake progressive scan
are explained.
The TV draws a picture by drawing a horizontal lines (of the picture to
be drawn) sequentially from top to bottom. Furthermore, it draws each
horizontal line from the left to the right. After drawing one horizontal
line, it traces back to the left end of the screen and proceeds drawing
the next line. After all the horizontal lines have been drawn, it goes
back to the top of the screen and begins writing the next picture[3].
To give information about the picture to the TV, one has to provide sync
signals to tell the TV when to start drawing the next line (H-Sync) and
when to start drawing the next frame (V-Sync). This process is best
understood pictorially and is very well shown by Rickard Gunee [1]. For
the sake of continuity, one example is presented here.
Now, we see that the voltage level for black is 0.3v , Sync is 0v and
the brightest point is 1v. Also, we see that just after the sync has
ended ( the front porch) , the signal level is maintained at the black
level. In fact, the TV takes this up as the black level and NOT 0.3v
although the TV expects it to be 0.3v.
What this means for us is shown in the following figure.
This feature wherein the TV calibrates itself to the black level of the
incoming signal is often referred to as "Auto Black". The point is that
if you're producing this signal, its a good idea to try to keep black as
close to 0.3v as possible but there is absolutely no need to be
concerned if it turns out to be 0.25v or 0.33v. The reason this feature
was added was to combat uncertain and sometimes varying attenuation as
broadcast signals travel a significant distance.
The TV typically works in the interlaced scanning mode.
This means that odd scanlines are written from the top of the screen to
the bottom and then after vertical retrace, even scanlines follow. So, 1
frame consisted of 2 fields. This was done to keep bandwidth in check
while the apparent frame rate was high enough that the viewers didn't
complain of flicker. However, it is rather difficult to produce
interlace NTSC signals if using a digital controller to generate signals
via software. Here, the rarely documented "fake-progressive" mode is
used[11]. The idea is that only even fields are written. We force the TV
to write the even field lines and after one field is complete, instead
of telling the TV to start writing odd field lines, we force it back to
writing the even field again.Yes, there are black , unwritten , odd
field lines in between "picture" even field lines. Consequently, the
frame rate is doubled to nearly 60Hz and we need no longer distinguish
between field and frame. This technique is by no means new, it has been
used in NES, SNES, Apple II, Atari 2600 and most other old consoles.
Old NTSC papers will say that during V-Sync, half scanlines are sent to
inform the TV to retrace back to the top. Serration , pre-equalization
and post-equalization pulses are in fact not necessary for the modern
TV. And when I say modern, I mean TV's made during and after the 80's.
We can get away with very simple V-Sync signal by having a look at how the TV distinguishes H-Sync from V-Sync[8].
The TV first separates the Sync from the rest of the signal using a
thresholding circuit and then inverts the sync signal. This inverted
signal is integrated. When it crosses a certain threshold, the sync
pulse(held low for 4.7uS) is detected a h-sync. If the integral crosses a
second threshold ( sync pulse is held low for a lot longer than 4.7uS) ,
it is detected as a V-Sync pulse. The reason the sync signal is
integrated is to reduce the effect of noise which would otherwise cause
the TV to incorrectly sync. This very simple and rather crude method of
detecting V-sync inside the TV means that we need not bother with
precise sync signals. The following Sync pattern is quite easy to
generate using PWM or otherwise and will serve our purpose very well. If
we look closely at the circuits(inside the TV) presented in [8], it is
clear the this sync pattern will force the TV into "fake-progressive"
mode.
I've tested this sync pattern on many TV's and the picture is rock
stable. Others[9,10] have suggested similar methods but if one is using
PWM, the above sync pattern is the easiest to produce. Surprisingly,
however, the fact that this "alternate" sync pattern forces the TV into
"fake-progressive" mode is simply not mentioned in most papers. As can
be seen in [8], half scanlines are needed to enter interlace mode. So,
the added advantage of not using half scanlines with 262 full scanlines
per frame is that there is absolutely no chance of accidentally entering
the interlaced mode resulting in severe flicker.
References
1. PIC PONG by Rickard Gunee
2. Text on TV by Batsocks
3. Video Basics - Maxim
4. PAL TV Timings and Voltages - Retroleum
5. AVR Video Generator with Mega163 - by Bruce Land
6. PAL and NTSC timing information - ePanorama
7. NTSC V-Sync Confusion - AVRFreaks Forum post
8. Scanning, Timing, Sync Recovery, Numbers
9. "TV Paint", Embedded Systems Design Laboratory EE281, Handout 7 - Stanford University
10. Video Generation with Mega644, EE476 - Cornell university
11. Video Primer - Uzebox
All this info was very helpful to me. Thank you very much for putting it all together.
ReplyDelete